package info.aquaball.service.mannschaftservice;

import java.util.ArrayList;
import java.util.List;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.EntityNotFoundException;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;

import info.aquaball.data.Mannschaft;
import info.aquaball.data.MannschaftImpl;

public class MannschaftServiceImpl implements MannschaftService {
	
	DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

	@Override
	public Mannschaft getMannschaftById(String id) throws EntityNotFoundException {
			Entity mannschaftEntity = datastore.get(KeyFactory.stringToKey(id));
			Mannschaft mannschaft = new MannschaftImpl(KeyFactory.keyToString(mannschaftEntity.getKey()), 
														(String)mannschaftEntity.getProperty("name"),
														(String)mannschaftEntity.getProperty("altersklasse_id"));
			return mannschaft;
	}

	@Override
	public void createMannschaft(Mannschaft mannschaft) {
		Entity mannschaftEntity = new Entity("Mannschaft");
		mannschaftEntity.setProperty("name", mannschaft.getName());
		mannschaftEntity.setProperty("altersklasse_id", mannschaft.getAltersklasseId());
		datastore.put(mannschaftEntity);
		mannschaft.setId(KeyFactory.keyToString(mannschaftEntity.getKey()));
	}

	@Override
	public void deleteMannschaft(String id) {
		datastore.delete(KeyFactory.stringToKey(id));		
	}

	@Override
	public List<Mannschaft> getAllMannschaften() {
		Query query = new Query("Mannschaft");
		PreparedQuery prepare = datastore.prepare(query);
		List<Mannschaft> resultList = new ArrayList<Mannschaft>();
		for(Entity entity : prepare.asIterable()){
			Mannschaft mannschaft = new MannschaftImpl(KeyFactory.keyToString(entity.getKey()), 
					(String)entity.getProperty("name"),
					(String)entity.getProperty("altersklasse_id"));
			resultList.add(mannschaft);
		}
		return resultList;
	}

}
